/**
 * Universidade Federal de Campina Grande - UFCG
 * Departamento de Sistemas e Computação - DSC
 * Disciplina: Compiladores
 * Professor: Marcus Salerno
 * 
 * Projeto da Disciplina - Analisador Lexico
 * 
 *  
 * Contributors:
 * Arthur
 * Carolina
 * Saulo
 * 
 */
package lexico;

import util.Constantes;
import erro.ErroLexico;
import erro.ErroTipoInvalido;

public class Numerico extends ASimbolo {

	/**
	 * Construtor
	 * @param codigo
	 * @param simbolo
	 */
	public Numerico(int codigo, String simbolo, int linha) {
		super(codigo, simbolo, linha);
	}
	
	/**
	 * Construtor
	 * @param symbol
	 */
	public Numerico(String symbol, int linha) {
		super(Constantes.CONSTANTE_NUMERICA, symbol, linha);
	}

	@Override
	public boolean verificaRegras() throws ErroLexico {		
		if (getSimbolo().length() > Constantes.TAMANHO_LIMITE) {
			setSimbolo(Integer.toString(Constantes.MAIOR_INTEIRO)); 
			throw new ErroLexico(Constantes.EXCEDIDO_MAXIMO_ERRO, -1);		
		}
		
		int num = Integer.parseInt(getSimbolo());
		if (num > Constantes.MAIOR_INTEIRO) {
			setSimbolo(Integer.toString(Constantes.MAIOR_INTEIRO));
			throw new ErroLexico(Constantes.EXCEDIDO_MAXIMO_ERRO, -1);
		} else if (num < Constantes.MINIMO_INTEIRO) {
			setSimbolo(Integer.toString(Constantes.MINIMO_INTEIRO));
			throw new ErroLexico(Constantes.EXCEDIDO_MINIMO_ERRO, -1);
		}
		
		return true;
	}
	
	
	@Override
	public void setTipo(String type) throws ErroTipoInvalido {
		//NOP
	}	
	
	@Override
	public String getTipo() {
		return "inteiro";
	}


}
